# Contributor: Valery Kartel <valery.kartel@gmail.com>
# Contributor: Łukasz Jendrysik <scadu@yandex.com>
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=postfix
pkgver=3.9.0
pkgrel=1
pkgdesc="Secure and fast drop-in replacement for Sendmail (MTA)"
url="https://www.postfix.org/"
arch="all"
license="IPL-1.0 EPL-2.0"
makedepends="
	coreutils
	cyrus-sasl-dev
	icu-dev
	libpq-dev
	linux-headers
	lmdb-dev
	m4
	mariadb-connector-c-dev
	openldap-dev
	openssl-dev>3
	pcre2-dev
	perl
	sqlite-dev
	"

install="$pkgname.pre-install"
subpackages="
	$pkgname-doc
	$pkgname-openrc
	$pkgname-ldap:_mv_dict
	$pkgname-mysql:_mv_dict
	$pkgname-pcre:_mv_dict
	$pkgname-pgsql:_mv_dict
	$pkgname-sqlite:_mv_dict
	$pkgname-stone
	"

options="!check suid"  # No test suite.
pkgusers="postfix"
pkggroups="postfix postdrop"
source="https://de.postfix.org/ftpmirror/official/postfix-$pkgver.tar.gz
	$pkgname.initd
	postfix-install.patch
	lmdb-default.patch
	"

_shared_libs() {
	file --mime-type "$@" | \
		awk -F: '$2 ~ /sharedlib/ {print $1}'
}

prepare() {
	default_prepare

	sed -i -e "s|#define HAS_NIS|//#define HAS_NIS|g" \
		-e "/^#define ALIAS_DB_MAP/s|:/etc/aliases|:/etc/postfix/aliases|" \
		src/util/sys_defs.h
	sed -i -e "s:/usr/local/:/usr/:g" conf/master.cf
}

build() {
	# needed for dynamic maps.
	local ccargs="-DHAS_SHL_LOAD"
	local auxlibs="$LDFLAGS"

	# berkeley-db
	ccargs="$ccargs -DNO_DB"

	# pcre2
	ccargs="$ccargs -DHAS_PCRE=2 $(pcre2-config --cflags)"

	# ssl
	ccargs="$ccargs -DUSE_TLS"
	auxlibs="$auxlibs -lssl -lcrypto"

	# dovecot-sasl
	ccargs="$ccargs -DUSE_SASL_AUTH -DDEF_SASL_SERVER=\\\"dovecot\\\""

	# cyrus sasl
	ccargs="$ccargs -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl"
	auxlibs="$auxlibs -lsasl2"

	# postgresql
	ccargs="$ccargs -DHAS_PGSQL $(pkg-config --cflags libpq)"

	# mysql
	ccargs="$ccargs -DHAS_MYSQL $(mysql_config --include)"

	# ldap
	ccargs="$ccargs -DHAS_LDAP -DUSE_LDAP_SASL"

	# sqlite
	ccargs="$ccargs -DHAS_SQLITE $(pkg-config --cflags sqlite3)"

	# lmdb (make it default)
	ccargs="$ccargs -DHAS_LMDB $(pkg-config --cflags lmdb) -DDEF_DB_TYPE=\\\"lmdb\\\""

	# compile
	make DEBUG="" \
		OPT="$CFLAGS" \
		CCARGS="$ccargs" \
		AUXLIBS="$auxlibs" \
		AUXLIBS_LDAP="-lldap -llber" \
		AUXLIBS_MYSQL="$(mysql_config --libs)" \
		AUXLIBS_PCRE="$(pkg-config --libs libpcre2-8)" \
		AUXLIBS_PGSQL="$(pkg-config --libs libpq)" \
		AUXLIBS_SQLITE="$(pkg-config --libs sqlite3)" \
		AUXLIBS_LMDB="$(pkg-config --libs lmdb)" \
		config_directory=/etc/postfix \
		meta_directory=/etc/postfix \
		daemon_directory=/usr/libexec/postfix \
		shlib_directory=/usr/lib/postfix \
		dynamicmaps=yes \
		shared=yes \
		makefiles

	make OPT="$CFLAGS"
}

_mvline() {
	local regex="$1"
	local outfile="$3.d/$2"
	local infile="$3"
	sed -i -E -e "\|$regex|{
w $outfile
d
}" $infile
}

package() {
	make non-interactive-package \
		install_root="$pkgdir" \
		readme_directory=/usr/share/doc/$pkgname/readme \
		manpage_directory=/usr/share/man

	# Install qshape auxiliary script
	install -Dm644 man/man1/qshape.1 -t "$pkgdir"/usr/share/man/man1
	install -Dm755 auxiliary/qshape/qshape.pl -t "$pkgdir"/usr/bin

	for i in postdrop postqueue; do
		chgrp postdrop "$pkgdir"/usr/sbin/$i
		chmod g+s "$pkgdir"/usr/sbin/$i
	done

	mkdir -p "$pkgdir"/usr/share/doc/postfix/defaults/ \
		"$pkgdir"/usr/share/licenses/$pkgname/
	mv "$pkgdir"/etc/postfix/*.default \
		"$pkgdir"/usr/share/doc/postfix/defaults/
	mv "$pkgdir"/etc/postfix/*LICENSE* \
		"$pkgdir"/usr/share/licenses/$pkgname/

	install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname
	chown postfix "$pkgdir"/var/spool/postfix/* "$pkgdir"/var/lib/postfix
	chown root:postfix "$pkgdir"/var/spool/postfix/pid
	chgrp postdrop "$pkgdir"/var/spool/postfix/maildrop \
		"$pkgdir"/var/spool/postfix/public

	cd "$pkgdir"/etc/postfix/
	for map in ldap mysql pcre pgsql sqlite lmdb; do
		msg "split $map"
		_mvline "^\s*$map" "$map" dynamicmaps.cf
	done
	rm makedefs.out

	# fix /etc/postfix/postfix-files so that "postfix set-permissions" can run
	sed -i \
		-e '/shlib_directory\/postfix-/d' \
		-e '/meta_directory\/makedefs.out/d' \
		-e '/manpage_directory/d' \
		-e '/config_directory\/LICENSE/d' \
		-e '/config_directory\/TLS_LICENSE/d' \
		-e '/config_directory\/[^/]\+\.cf\.default/d' \
		"$pkgdir"/etc/postfix/postfix-files
}

_mv_dict() {
	local m=${subpkgname##*-}
	pkgdesc="$m map support for postfix"
	depends=
	mkdir -p "$subpkgdir"/usr/lib/postfix \
		"$subpkgdir"/etc/postfix/dynamicmaps.cf.d
	mv "$pkgdir"/usr/lib/postfix/postfix-$m.so \
		"$subpkgdir"/usr/lib/postfix/
	mv "$pkgdir"/etc/postfix/dynamicmaps.cf.d/$m \
		"$subpkgdir"/etc/postfix/dynamicmaps.cf.d/
}

stone() {
	cd $builddir
	pkgdesc="Postfix simulation and testing tools"
	install -Dm755 src/fsstone/fsstone "$subpkgdir"/usr/bin/fsstone
	find src/smtpstone -mindepth 1 -perm 0755 -exec cp {} "$subpkgdir"/usr/bin \;
}
sha512sums="
46faaf529a6d2edc5ea747ee0d73a028f7061a923da0ea4b1e1828d935b15f5782d83f7a8472e7c74b45ea0e96666c871efd352934bead28a88ddd3561ade324  postfix-3.9.0.tar.gz
2752e69c4e1857bdcf29444ffb458bca818bc60b9c77c20823c5f5b87c36cb5e0f3217a625a7fe5788d5bfcef7570a1f2149e1233fcd23ccf7ee14190aff47a2  postfix.initd
25cd34f23ca909d4e33aaf3239d1e397260abc7796d9a4456dee4f005682fd3a58aab8106126e5218c95bdddae415a3ef7e2223cd3b0d7b1e2bd76158bb7eaf8  postfix-install.patch
0769e2e503486f8dd6fa21f2c534ad7df7a9f1bb57dde2f0ad61863a3e615d0a6dc18132b27796eb28cd81afb2b4e97c65c9d490a391f835aa3b7b18e74252c5  lmdb-default.patch
"
